package com.jmyd.coupon.server.domain.po;

import com.jmyd.commons.base.po.BaseSimpleStandardPo;
import com.jmyd.coupon.server.domain.dto.SceneCouponDto;
import com.jmyd.coupon.server.domain.dto.SceneCouponQueryDto;
import com.jmyd.coupon.server.domain.dto.SceneCouponUpdateDto;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import javax.persistence.Column;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 *  @author samphin
 * @since 2021/7/14 16:15
 */
@Data
@Table(name = "scene_coupon")
public class SceneCoupon extends BaseSimpleStandardPo<Long> implements Serializable {

    /**
     * 优惠券模板名称
     */
    @Column(name = "`NAME`")
    private String name;

    /**
     * 优惠券面值（如果满减券则为满金额）
     */
    @Column(name = "AMOUNT")
    private BigDecimal amount;

    /**
     * 优惠金额面值（针对满减券，折扣值）
     */
    @Column(name = "DISCOUNT_AMOUNT")
    private BigDecimal discountAmount;

    /**
     * 优惠券类型:1：折扣券，2：满减券 3：免单券 4：立减券 5：随机券
     */
    @Column(name = "`TYPE`")
    private Integer type;

    /**
     * 模板状态：true=有效;false=无效
     */
    @Column(name = "`STATUS`")
    private Boolean status;

    /**
     * 优惠券使用状态(0:未使用 1:已使用 2:已过期)
     */
    @Column(name = "USE_STATUS")
    private Integer useStatus;

    /**
     * 优惠码
     */
    @Column(name = "CODE")
    private String code;

    /**
     * 优惠券有效期起始时间
     */
    @Column(name = "VALID_START_TIME")
    private Date validStartTime;

    /**
     * 优惠券有效期结束时间
     */
    @Column(name = "VALID_END_TIME")
    private Date validEndTime;

    /**
     * 互斥状态：true=互斥;false=不互斥
     */
    @Column(name = "EXCLUSIVE_STATUS")
    private Boolean exclusiveStatus;

    /**
     * 使用平台：PC、APP、H5、APPLET
     */
    @Column(name = "USE_PLATFORM")
    private String usePlatform;

    /**
     * 描述
     */
    @Column(name = "`DESC`")
    private String desc;

    public SceneCoupon build(SceneCouponQueryDto dto) {
        BeanUtils.copyProperties(dto, this);
        return this;
    }

    public SceneCoupon build(SceneCouponDto dto) {
        BeanUtils.copyProperties(dto, this);
        return this;
    }

    public SceneCoupon build(SceneCouponUpdateDto dto) {
        BeanUtils.copyProperties(dto, this);
        return this;
    }
}